<?php

class UsuariosController extends AppController {

    public $helpers = array('Html', 'Form', 'Siscel', 'CakePtbr.Estados', 'Js' => array('Jquery'));
    public $components = array('RequestHandler');

    public function index() {

        $parametros['conditions'] = array();

        if ($this->request->is('post')) {
            $usuario = $this->request->data('Pesquisar');

            if (!self::validaPesquisa($usuario)) {
                $this->Session->setFlash(__('Ao menos um paramtro deve ser informado.'));
                $this->redirect(array('action' => 'index'));
                return;
            }

            $i = 0;

            $parametros['joins'] = array(
                    array(
                            'table' => 'RL_AUTORIZADO_PERFIL_INST',
                            'alias' => 'RelacionamentoAutoPerfilInst',
                            'type' => 'INNER',
                            'conditions' => array(
                                    'Usuario.CD_LOGIN = RelacionamentoAutoPerfilInst.CD_LOGIN'
                            )
                    ),
                    array(
                            'table' => 'INSTITUICAO_LAB',
                            'alias' => 'Instituicao',
                            'type' => 'INNER',
                            'conditions' => array(
                                    'Instituicao.CD_INST_LAB = RelacionamentoAutoPerfilInst.CD_INST_LAB'
                            )
                    )
            );

            if (!empty($usuario['NM_AUT'])) {
                $parametros['conditions'][$i++] = array('Usuario.NM_AUT LIKE ' => '%' . $usuario['NM_AUT'] . '%');
            }
            if (!empty($usuario['CD_LOGIN'])) {
                $parametros['conditions'][$i++] = array('Usuario.CD_LOGIN = ' => str_replace(array('-', '.'), '', $usuario['CD_LOGIN']));
            }
            if (!empty($usuario['NUM_CNS'])) {
                $parametros['conditions'][$i++] = array('Usuario.NUM_CNS = ' => $usuario['NUM_CNS']);
            }
            if (!empty($usuario['STATUS'])) {
                $parametros['conditions'][$i++] = array('Usuario.STATUS = ' => $usuario['STATUS']);
            }
            if (!empty($usuario['CO_PERFIL'])) {
                $parametros['conditions'][$i++] = array('RelacionamentoAutoPerfilInst.CO_PERFIL =  ' => $usuario['CO_PERFIL']);
            }
            if (!empty($usuario['CO_UNIDADE'])) {
                $parametros['conditions'][$i++] = array('RelacionamentoAutoPerfilInst.CD_INST_LAB = ' => $usuario['CO_UNIDADE']);
            }
            
            $this->set('usuarios', self::pesquisarUsuario($parametros));
        } else {

            $this->set('usuarios', self::pesquisarUsuario($parametros));
            $this->render('index');
        }
    }

    public function pesquisarUsuario($parametros){
        return $this->Usuario->find('all', $parametros);
    }

    private function verificaExistenciaMedico($params) {
        $i = 0;
        $parametros = array();
        $this->loadModel('Medico');
        $parametros['conditions'][$i++] = array('Medico.NM_MEDIC LIKE ' => '%' . $params['NM_AUT'] . '%');
        $parametros['conditions'][$i++] = array('Medico.CPF_MEDIC = ' => str_replace(array('-', '.', '/'), '', $params['CD_LOGIN']));
        return $this->Medico->find('first', $parametros);
    }

    private function verificaExistenciaPaciente($params) {
        $i = 0;
        $parametros = array();
        $this->loadModel('Paciente');
        $parametros['conditions'][$i++] = array('Paciente.NM_PAC LIKE ' => '%' . $params['NM_AUT'] . '%');
        return $this->Paciente->find('first', $parametros);
    }

    private function verificaExistenciaUsuario($params) {
        $i = 0;
        $parametros = array();
        $this->loadModel('Autorizados');
        $parametros['conditions'][$i++] = array('Autorizados.NM_AUT LIKE ' => '%' . $params['NM_AUT'] . '%');
        return $this->Autorizados->find('first', $parametros);
    }

    public function cadastrar() {
        if ($this->request->is('post')) {
            if (TRUE) {
                try {

                    $post = $this->request->data['Usuario'];
                    $this->loadModel('Autorizados');
                    $arrUsuario = array();

                    if ($post['TP_USU'] == 2) {
                        $usCadastrado = self::verificaExistenciaMedico($post);
                        if (count($usCadastrado)) {
                            $post['DS_EMAIL'] = ($usCadastrado['END_ELETRONICO']) ? $usCadastrado['END_ELETRONICO'] : $post['DS_EMAIL'];
                            $post['DS_EMAIL_SEC'] = ($usCadastrado['END_ELETRONICO_SEC']) ? $usCadastrado['END_ELETRONICO_SEC'] : $post['DS_EMAIL_SEC'];
                            $post['SEXO'] = ($usCadastrado['TP_SEXO']) ? $usCadastrado['TP_SEXO'] : $post['SEXO'];
                        }
                    }

                    if ($post['TP_USU'] == 4) {
                        $usCadastrado = self::verificaExistenciaPaciente($post);
                        if (count($usCadastrado)) {
                            $post['DS_EMAIL'] = ($usCadastrado['EMAIL']) ? $usCadastrado['EMAIL'] : $post['DS_EMAIL'];
                            $post['DS_EMAIL_SEC'] = ($usCadastrado['E_MAIL']) ? $usCadastrado['E_MAIL'] : $post['DS_EMAIL_SEC'];
                            $post['SEXO'] = ($usCadastrado['SEXO']) ? $usCadastrado['SEXO'] : $post['SEXO'];
                        }
                    }

                    $dataSource = $this->Autorizados->getDataSource();
                    $dataSource->begin();

                    $cdLogin = str_replace(array('-', '.', '/'), '', $post['CD_LOGIN']);
                    $arrUsuario['Autorizados']['CD_LOGIN'] = $cdLogin;
                    $arrUsuario['Autorizados']['NM_AUT'] = $post['NM_AUT'];
                    $arrUsuario['Autorizados']['STATUS'] = 'A';
                    $arrUsuario['Autorizados']['SENHA'] = '123456';
                    $arrUsuario['Autorizados']['SEXO'] = $post['SEXO'];
                    $arrUsuario['Autorizados']['DS_EMAIL'] = $post['DS_EMAIL'];
                    $arrUsuario['Autorizados']['DS_EMAIL_SEC'] = ($post['DS_EMAIL_SEC']) ? $post['DS_EMAIL_SEC'] : NULL;
                    $arrUsuario['Autorizados']['TP_AUTORIZADO'] = $post['TP_USU'];

                    if (!$this->Autorizados->save($arrUsuario)) {
                        throw new Exception();
                    }

//                    if(!empty($this->request->data['Usuario']['fotoUsuario']['name'])){
//                        $tmp_nome = $this->request->data['Usuario']['fotoUsuario']['tmp_name'];    
//                        self::uploadIMG($tmp_nome, $cdLogin);
//                    }

                    if (!empty($this->request->data['Telefone'])) {
                        $this->loadModel('Telefone');
                        foreach ($this->request->data['Telefone']['TP_TELEFONE'] as $k => $t) {
                            $tel['CO_TELEFONE'] = $this->Telefone->nextVal('CO_TELEFONE');
                            $tel['CD_LOGIN'] = $cdLogin;
                            $tel['DDD_TELEFONE'] = $this->request->data['Telefone']['DDD_TELEFONE'][$k];
                            $tel['NU_TELEFONE'] = strtr($this->request->data['Telefone']['NU_TELEFONE'][$k], array('-' => ''));
                            $tel['ST_PRINCIPAL'] = (!empty($this->request->data['Telefone']['ST_PRINCIPAL'][$k])) ? $this->request->data['Telefone']['ST_PRINCIPAL'][$k] : 'N';
                            $tel['TP_TELEFONE'] = $this->request->data['Telefone']['TP_TELEFONE'][$k];
                            if (!$this->Telefone->save($tel, false)) {
                                Throw new Exception("Erro ao cadastrar o telefone");
                            }
                        }
                    }

                    foreach ($_SESSION['usuario']['RelacionamentoAutoPerfilInst'] as $unidades) {
                        $this->loadModel('RelacionamentoAutoPerfilInst');
                        $arrUnidade = array();
                        $arrUnidade['RelacionamentoAutoPerfilInst']['CD_LOGIN'] = $cdLogin;
                        $arrUnidade['RelacionamentoAutoPerfilInst']['CD_INST_LAB'] = $unidades['CD_INST_LAB'];
                        $arrUnidade['RelacionamentoAutoPerfilInst']["CO_PERFIL"] = $post['TP_USU'];
                        $arrUnidade['RelacionamentoAutoPerfilInst']["ST_AUT_PERFIL_INST"] = 'A';

                        if (!$this->RelacionamentoAutoPerfilInst->save($arrUnidade)) {
                            throw new Exception();
                        }
                    }

                    $dataSource->commit();
                    $this->Session->setFlash(__('Registro salvo.'));
                } catch (Exception $e) {
                    $dataSource->rollback();
                    $this->Session->setFlash(__('Ocorreu erro no cadastro'));
                }
            }
        } else {

        }

        $this->loadModel('Perfil');
        $this->set('arrUsuario', $this->Perfil->getCombo(array('CO_PERFIL', 'NO_PERFIL')));
    }

    public function uploadIMG($tmp_nome, $cdLogin) {
        if (is_uploaded_file($tmp_nome)) {
            $this->Autorizados->query("UPDATE AUTORIZADO SET IM_FOTO = (SELECT * FROM OPENROWSET(BULK '" . $tmp_nome . "', SINGLE_BLOB) AS A) WHERE CD_LOGIN = '" . $cdLogin . "'");
        } else {
            $this->Session->setFlash("Falha no upload");
        }
    }

    public function foto($login = null) {

        if (isset($login)) {

            $usuario = $this->Usuario->find('first', array('conditions' => array('Usuario.CD_LOGIN =' => $login)));
            $data = $usuario['Usuario']['IM_FOTO'];
            $bin = "";
            $i = 0;
            do {
                $bin.= chr(hexdec($data{$i} . $data{($i + 1)}));
                $i += 2;
            } while ($i < strlen($data));

            $this->set('foto', $bin);
        }
    }

    public function cadastro($id = NULL) {
//        if (empty($id) || strlen($id) < 11) {
        if (empty($id)) {
            //$this->Session->setFlash("Nenhum usuário foi identificado.");
            $this->redirect('index');
        }

        try {
            $this->loadModel('Usuario');

            $parametros['conditions'][0] = array('Usuario.CD_LOGIN' => $id);

            $usuarios = $this->Usuario->find('first', $parametros);

            $this->loadModel('RelacionamentoAutoPerfilInst');
            $parametrosInst = array();
            $parametrosInst['joins'] = array(
                    array(
                            'table' => 'INSTITUICAO_LAB',
                            'alias' => 'INSTITUICAO',
                            'type' => 'INNER',
                            'conditions' => array(
                                    'INSTITUICAO.CD_INST_LAB = RelacionamentoAutoPerfilInst.CD_INST_LAB'
                            )
                    ),
                    array(
                            'table' => 'RL_RESP_INSTITUICAO_SERVICO',
                            'alias' => 'RL_SERVICO',
                            'type' => 'LEFT',
                            'conditions' => array(
                                    'RL_SERVICO.CD_INST_LAB = INSTITUICAO.CD_INST_LAB'
                            )
                    ),
                    array(
                            'table' => 'TB_SERVICO',
                            'alias' => 'SERVICO',
                            'type' => 'LEFT',
                            'conditions' => array(
                                    'SERVICO.CO_SERVICO = RL_SERVICO.CO_SERVICO'
                            )
                    )
            );
            $parametrosInst['fields'] = array('INSTITUICAO.CD_INST_LAB',
                    'INSTITUICAO.NM_INST',
                    'INSTITUICAO.NM_INST_CURTO',
                    'INSTITUICAO.CNPJ_INST_LAB',);
            $parametrosInst['conditions'][0] = array('RelacionamentoAutoPerfilInst.CD_LOGIN' => $id);
            $usuarios['INSTITUICAO'] = $this->RelacionamentoAutoPerfilInst->find('all', $parametrosInst);

            $this->loadModel('Perfil');
            $parametrosPerfil = array();
            $parametrosPerfil['joins'] = array(
                    array(
                            'table' => 'RL_PERFIL_PERMISSAO',
                            'alias' => 'PEFIL_PERMISSAO',
                            'type' => 'LEFT',
                            'conditions' => array(
                                    'PEFIL_PERMISSAO.CO_PERFIL = Perfil.CO_PERFIL'
                            )
                    ),
                    array(
                            'table' => 'TB_PERMISSAO',
                            'alias' => 'PERMISSAO',
                            'type' => 'LEFT',
                            'conditions' => array(
                                    'PERMISSAO.CO_PERMISSAO = PEFIL_PERMISSAO.CO_PERMISSAO'
                            )
                    )
            );
            $parametrosPerfil['fields'] = array(
                    'Perfil.CO_PERFIL',
                    'Perfil.NO_PERFIL',
                    'PERMISSAO.DS_PERMISSAO',);
//            $parametrosPerfil['conditions'][0] = array('Perfil.ST_PERFIL' => 'A');
            $usuarios['PERFIL'] = $this->Perfil->find('all', $parametrosPerfil);
            $usuarios['MENSAGEM'] = array();

            $this->set('usuario', $usuarios);

            $this->set('bloquear', true);
            $this->loadModel('Perfil');
            $this->set('arrUsuario', $this->Perfil->getCombo(array('CO_PERFIL', 'NO_PERFIL')));
        } catch (Exception $e) {
            $dataSource->rollback();
            $this->Session->setFlash(__('Ocorreu erro no cadastro'));
        }
    }

    public function executaacao() {
        $params = $this->request->data;
    }

    public function alterarsenha() {
        $this->layout = false;
        $this->autoRender = false;
        $this->render(false);

        $params = $this->request->data;

        if ($params['DS_SENHA'] != $params['DS_SENHA_CONF']) {
            echo 'errosenhadif';
            exit;
        }
        $this->loadModel('Autorizados');
        $parametros['conditions'][0] = array('Autorizados.CD_LOGIN = ' => str_replace(array('-', '.'), '', $params['CD_LOGIN']));
        $usuario = $this->Autorizados->find('first', $parametros);

        if ($params['DS_SENHA_ANTERIOR'] != $usuario["Autorizados"]["SENHA"]) {
            echo 'errosenha';
            exit;
        }

        $this->Autorizados->query("UPDATE AUTORIZADO SET SENHA = '{$params['DS_SENHA']}' WHERE CD_LOGIN = '{$params['CD_LOGIN']}'");
        echo 'ok';
    }

    public function vinculaperfil() {
        $this->layout = false;
        $this->autoRender = false;
        $this->render(false);

        $this->loadModel('Autorizados');
        $params = $this->request->data;

        $usuario = $this->Autorizados->query("SELECT * FROM RL_AUTORIZADO_PERFIL_INST WHERE CD_LOGIN = '{$params['CD_LOGIN']}' AND CO_PERFIL = '{$params['CO_PERFIL']}' ");

        if (count($usuario)) {
            if ($params['SITUACAO'] == 'TRUE') {
                $this->Autorizados->query("UPDATE RL_AUTORIZADO_PERFIL_INST SET CO_PERFIL = '{$params['CO_PERFIL']}' WHERE CD_LOGIN = '{$params['CD_LOGIN']}'");
            } else {
                $this->Autorizados->query("UPDATE RL_AUTORIZADO_PERFIL_INST SET CO_PERFIL = NULL WHERE CD_LOGIN = '{$params['CD_LOGIN']}'");
            }
        } else {

            $this->Autorizados->query("INSERT INTO RL_AUTORIZADO_PERFIL_INST (CD_LOGIN, CO_PERFIL, ST_AUT_PERFIL_INST, CD_INST_LAB) VALUES ('{$params['CD_LOGIN']}', '{$params['CO_PERFIL']}', 'A', '{$params['CD_INST_LAB']}')");
        }
    }

}